Semiconductor memory devices, including flash memory, typically utilize memory cells to store data as an electrical value, such as an electrical charge or voltage. A flash memory cell, for example, includes a single transistor with a floating gate that is used to store a charge representative of a data value. Flash memory is a non-volatile data storage device that can be electrically erased and reprogrammed. More generally, non-volatile memory (e.g., flash memory, as well as other types of non-volatile memory implemented using any of a variety of technologies) retains stored information even when not powered, as opposed to volatile memory, which requires power to maintain the stored information.
Historically, wear leveling has been defined as a technique used to distribute program-erase cycles as evenly as possible across units of a memory device. For example, for a flash memory device, if a particular block of memory is programmed and erased repeatedly without writing to any other blocks, the one block of memory would wear out before all the other blocks, prematurely ending the life of the memory device. Ideally, wear leveling would enable every block to be used to its maximum life. However, even with uniform workloads, simply distributing program-erase cycles as evenly as possible across all the units of a memory device may not maximize the life of the memory device. Since different units of a memory device may have different wear characteristics, it is important to utilize a wear leveling scheme that accounts for different wear characteristics.